/*
 * @Author: your name
 * @Date: 2020-08-01 07:27:28
 * @LastEditTime: 2020-08-01 12:08:05
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /Projects/linux/Program/客服系统/include/online_server_list.h
 */ 
#ifndef _ONLINE_SERVER_LIST_H 
#define _ONLINE_SERVER_LIST_H 
/********头文件定义************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "online_custom_list.h"
/********结构体定义************/
typedef struct onlineServeNode{

	char *id;										//用户ID	
	char *name;										//用户名
	int socketfd;									// 客服连接的标识符
	int customSocketFd;								// 正在服务的客户的连接标识符,初值为-1
	int waitCustomNum;								// 等待服务的客户人数，初值为0
	struct onlineCustomNode* waitCustomList;			// 等待服务的客户链表
	struct onlineServeNode *next;
}ONLINESERVENODE;
/**************接口函数声明**************/

/*
	功能：创建链表头节点
	参数：无
	返回值：链表头节点指针
	作者：ljj
	时间：2020/8/1
*/
ONLINESERVENODE *creat_onlineServeNode_list();
/*
	功能：根据id，和name,socketfd创建节点,并且加入链表
	参数：id：用户的id， name：用户的名字 socketfd:和用户绑定的套接字
	返回值：无
	作者：ljj
	时间：2020/8/1
*/
void add_onlineServeNode(ONLINESERVENODE* head, const char *id, const char *name, int socketfd);
/*
	功能：根据用户id账号查找节点
	参数：head：链表头指针， id:用户id账号
	返回值：查找到的节点指针,查找不到返回NULL
	作者：ljj
	时间：2020/8/1
*/
ONLINESERVENODE *find_onlineServeNode_by_id(ONLINESERVENODE* head, const char *id);
/*
	功能：更新客服的正在服务的客户的连接标识符
	参数：head：在线客服链表头指针， id：客服的id    customSocketFd:要更新的即将服务的客户的连接标识符
	返回值：无
	作者：ljj
	时间：2020/8/1
*/
void update_onlineServeNode_customSocketFd_by_id(ONLINESERVENODE* head, const char *id, int customSocketFd);
/*
	功能：更新客服的等待服务的客户人数
	参数：head：在线客服链表头指针， id：客服的id    waitCustomNum:要更新的等待服务的客户人数
	返回值：无
	作者：ljj
	时间：2020/8/1
*/
void update_onlineServeNode_waitCustomNumd_by_id(ONLINESERVENODE* head, const char *id, int waitCustomNum);
/*
	功能：根据id账号删除节点
	参数：head：链表头指针， id:用户id账号
	返回值：-1：删除失败   0:删除成功
	作者：ljj
	时间：2020/8/1
*/
int del_onlineServeNode_by_id(ONLINESERVENODE* head, const char *id);
/*
	功能：摧毁链表
	参数：head：链表头指针
	返回值：无
	作者：ljj
	时间：2020/8/1
*/
void destory_onlineServeNode_list(ONLINESERVENODE **head);
/*
	功能：打印全部节点信息id, name,socketfd, customSocketFd, waitCustomNume
	参数：head:头节点指针
	返回值：无
	作者：ljj
	时间：2020/8/1
*/
void display_onlineServeNode_all_basic_information(ONLINESERVENODE *head);
#endif